//给你两个二进制字符串，返回它们的和（用二进制表示）。
//
// 输入为 非空 字符串且只包含数字 1 和 0。
//
//
//
// 示例 1:
//
// 输入: a = "11", b = "1"
//输出: "100"
//
// 示例 2:
//
// 输入: a = "1010", b = "1011"
//输出: "10101"
//
//
//
// 提示：
//
//
// 每个字符串仅由字符 '0' 或 '1' 组成。
// 1 <= a.length, b.length <= 10^4
// 字符串如果不是 "0" ，就都不含前导零。
//
// Related Topics 位运算 数学 字符串 模拟 👍 850 👎 0

package leetcode;
//leetcode submit region begin(Prohibit modification and deletion)
public class addBinary {
    public String addBinary(String a, String b) {
        int length=a.length()>b.length()?a.length():b.length();
        int bl=b.length();
        int al = a.length();
        //拼接0
        if(length==bl){
            for (int i=0;i<length-al;i++){
                a="0"+a;
            }
        }

        if(length==al){
            for (int i=0;i<length-bl;i++){
                b="0"+b;
            }
        }
        boolean flag =false;
        String result="";
        for (int j = length-1;j>=0;j--){

            if(flag){
                if(a.charAt(j)=='0'&&b.charAt(j)=='1'){
                    result="0"+result;
                    flag=true;
                }
                if(a.charAt(j)=='0'&&b.charAt(j)=='0'){
                    result="1"+result;
                    flag=false;
                }
                if(a.charAt(j)=='1'&&b.charAt(j)=='1'){
                    result="1"+result;
                    flag=true;
                }
                if(a.charAt(j)=='1'&&b.charAt(j)=='0'){
                    result="0"+result;
                    flag=true;
                }
            }else{
                if(a.charAt(j)=='0'&&b.charAt(j)=='1'){
                    result="1"+result;
                    flag=false;
                }
                if(a.charAt(j)=='0'&&b.charAt(j)=='0'){
                    result="0"+result;
                    flag=false;
                }
                if(a.charAt(j)=='1'&&b.charAt(j)=='1'){
                    result="0"+result;
                    flag=true;
                }
                if(a.charAt(j)=='1'&&b.charAt(j)=='0'){
                    result="1"+result;
                    flag=false;
                }
            }
        }
        if(flag){
            result="1"+result;
        }
        return result;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
